我想做单元测试。为了简单起见,我只想确保调用“JWTCheck”。我该怎么做?这是我实现JWTCheck的文件:typeJWTCheckerstruct{SubjectPrefixstring}func(j*JWTChecker)JWTCheck(nexthttp.Handler)http.Handler{//Dosomething}这是我实现路由器的地方:import("net/http""github.com/gorilla/mux")//Routerreturnsapreconfiguredrouterforapplicationfunc(a*Adapter)Router()ht
我想创建一个简单的函数来测试编码/解码记录是否按预期工作。我只是在这个例子中使用JSON:packagetestimport("encoding/json""fmt""testing""reflect""github.com/stretchr/testify/require")funcCheckRoundTripJSON(t*testing.T,recordinterface{}){data,err:=json.Marshal(record)require.NoError(t,err)fmt.Println("Record:",record,"wasencodedto:",data,"
我想定义一个安全分区,例如:funcsafeDivide(a,binterface{})interface{}{ifb==0{return0}returna/b}很明显,这个功能是行不通的。我们不能划分界面。一种解决方案是判断输入的类型并进行除法。switchreflect.ValueOf(x).Kind(){casereflect.Int://balabala...虽然看起来很多余,但我必须处理每一个案子。那么我是否可以使用反射来保证输入的类型?我试过reflect.TypeOf()但失败了。顺便说一句,我注意到了这一点:a:=uint32(0)ifZero(a)//outputs"
我想为波纹管函数编写一个测试,但我不明白我可以将什么作为参数发送给toCount,因为我不想打开/创建文件,我知道os.Stdin会起作用,但我认为你不能写入它。functoCount(f*os.File)int{input:=buffo.NewScanner(f)sum:=0;forinput.Scan(){sum++}returnsum} 最佳答案 您的toCount函数只需要一个io.Reader。如果将签名更改为functoCount(fio.Reader)int它可以接受*os.File和任何其他你想用来测试的阅读器。
我知道您可以通过以下方式在Go中获取slice的一部分test:=[]int{0,1,2,3,4}subsection:=test[:2]但是如果你尝试类似的东西subsectionError:=test[:10]你会得到一个越界错误。目前我正在做类似的事情length:=10iflen(test)为了避免这个错误,但是有更好的方法吗?这对我来说感觉很老套,但话又说回来,Go通常似乎是一种非常明确的语言。 最佳答案 在Go中,答案通常是在函数或方法中隐藏丑陋之处。例如,一个min函数,packagemainimport"fmt"fu
我有以下功能:funcSomeFunction(whttp.ResponseWriter,...)error{...returnjson.NewEncoder(w).Encode(&c)}其中c是我的结构。当我运行该函数时,我收到带有json的响应主体,但我无法测试该函数。例如,我有:funcTestSomeFunction(t*testing.T){...w:=httptest.ResponseRecorder{}err:=SomeFunction(w,...)..}在这种情况下,我的w.Body是空的。问题不在于我的功能,因为我在运行时得到了body。我认为我没有以正确的方式进行测
谈到在Go中进行测试时,我有点困惑。我读过在某些情况下抽象到接口(interface)应该是理想的方式,在其他情况下我看到了TestTables。我不太确定何时应用其中任何一个。例如,如何测试下面的功能。typeUser{Namestring`json:"name"`IsMarriedbool`json:"isMarried"`Nicknames[]string`json:"nicknames"`}func(u*User)Create()(*http.Response,error){data,err:=json.Marshal(u)iferr!=nil{returnnil,err}ur
slice:=[]int{10,20,30,40,50,60}newSlice:=slice[2:4:5]fmt.Printf("oldsliceis%d\n",slice)fmt.Printf("newsliceis%d\n",newSlice)newSlice=append(newSlice,70)fmt.Printf("oldsliceis%d\n",slice)fmt.Printf("newsliceis%d\n",newSlice)newSlice=append(newSlice,80)fmt.Printf("oldsliceis%d\n",slice)fmt.Printf(
编辑:我的目标是同时运行多个GoHTTP服务器。在使用Nginx反向代理访问在多个端口上运行的GoHTTP服务器时,我遇到了一些问题。最后,这是我用来运行多个服务器的代码。packagemainimport("net/http""fmt""log")funcmain(){//Showonconsoletheapplicationstatedlog.Println("Serverstartedon:http://localhost:9000")main_server:=http.NewServeMux()//Creatingsub-domainserver1:=http.NewServe
我想对调用os.File.Write()的函数进行单元测试,并希望达到100%的覆盖率。此函数返回n和一个错误。引发错误很容易。我只需要关闭文件。我怎样才能不引起写入错误和写入数据长度的值n不同?看起来我应该创建一个虚拟的os.File,我可以在上面控制返回的错误。不幸的是,os.File不是一个接口(interface)。编辑:根据PeterOS的回答,仔细检查文档后,Write()方法,是否为io.Writer或io.File如果err为nil,将始终返回写入的slice的长度。结果,看来我的问题毫无意义。我学到了一些重要的东西,谢谢。我有一些代码要清理。附带说明一下,我对100%